#ifndef WEATHERTOOL_H
#define WEATHERTOOL_H

#include<QMap>//存储键值对的数据结构
#include<QFile>//文件操作

#include<QJsonArray>//JSON数组
#include<QJsonObject>//JSON对象
#include<QJsonDocument>//JSON文档
#include<QJsonParseError>//JSON解析错误
#include<QJsonValue>//JSON中的值


//从一个文件中读取JSON数据，
//并将其解析为一个QJsonArray对象，
//然后将解析后的数据存储到一个静态的QMap中

class WeatherTool{
private:
    static QMap<QString, QString> mCityMap;

    static void initCityMap(){
//        QString filePath="D:\\Qt_Code\\Project\\Industrial_monitor\\cn_weather_citylist.json";
//        QString filePath="D:\\Qt_Code\\Project\\qt_industry\\2019-03-13-cn_weather_citylist_compressed.json";
          QString filePath="../industrial_-monitor/2019-03-13-cn_weather_citylist_compressed.json";

        //1.读取文件/*
        //将 指定路径的文件内容 读取到 一个QByteArray对象中
        QFile file(filePath);// 创建一*/个QFile对象，并指定文件路径
        file.open(QIODevice::ReadOnly | QIODevice::Text);// 以只读模式打开文件，并指定文本模式
        QByteArray json = file.readAll(); // 读取文件的全部内容，并将其存储在QByteArray对象中
        file.close();

        //2.解析，写入到map
        //QJsonDocument类来解析JSON数据

        //创建了 一个QJsonParseError对象err，用于存储解析过程中的 错误信息
        QJsonParseError err;
        //将 JSON字符串json 转换为一个QJsonDocument 对象doc ，并将错误信息存储在err中
        QJsonDocument doc = QJsonDocument::fromJson(json, &err);
        if(err.error != QJsonParseError::NoError){
            return;
        }

        if(!doc.isArray()){
            return;
        }

        //将doc转换为一个QJsonArray对象cities
        QJsonArray cities = doc.array();
        for(int i=0;i<cities.size();i++){

            QString city = cities[i].toObject().value("cityName").toString();
            QString code = cities[i].toObject().value("cityCode").toString();

            if(code.size() > 0){
                mCityMap.insert(city, code);
            }
        }

    }

public:
    static QString getCityCode(QString cityName){
        if(mCityMap.isEmpty()){
            initCityMap();
        }

        QMap<QString,QString>::iterator it = mCityMap.find(cityName);

        // 北京/北京市
        if(it == mCityMap.end()){
            it = mCityMap.find(cityName + "市");
        }

        if(it != mCityMap.end()){
            return it.value();
        }

        return "";
    }
};

QMap<QString, QString> WeatherTool::mCityMap = {};


#endif // WEATHERTOOL_H
